package tp.disenio.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.VerticalPanel;


public class TablaDePosicionesUA extends Composite {
	private Button btnHome;
	private Button btnResultadosBsqueda;
	private Button btnImprimir;
	private FlexTable flexTable;
	private ScrollPanel scrollPanelPosiciones;
	private PushButton pshbtnModificar;
	private PushButton pshbtnDarDeBaja;
	private PushButton pshbtnFixture;
	private PushButton pshbtnParticipantes;
	private PushButton pshbtnTablaDePosiciones;
	private PushButton pshbtnGenerarFixture;
	private TextBox txtBxNombre;
	private TextBox txtBxModalidad;
	private TextBox txtBxDeporte;
	private TextBox txtBxEstadodecompetencia;
	private Label lblUsuario;
	private Label lblSalir;
	private CompetenciaDTO competencia;
	final RootPanel rootPanel;
	
	


	public TablaDePosicionesUA(String user,CompetenciaDTO competencia) {
		
		rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetencia(competencia);
		
		// WIDGETS 
		
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
		
		btnResultadosBsqueda = new Button("Volver a B\u00FAsqueda");
		absolutePanel.add(btnResultadosBsqueda, 160, 100);
	
		btnImprimir = new Button("Imprimir");
		absolutePanel.add(btnImprimir,800,400);
		
		pshbtnModificar = new PushButton("Modificar");
		absolutePanel.add(pshbtnModificar, 759, 195);
		pshbtnModificar.setSize("131px", "18px");
		
		pshbtnDarDeBaja = new PushButton("Dar de Baja");
		absolutePanel.add(pshbtnDarDeBaja, 759, 225);
		pshbtnDarDeBaja.setSize("131px", "18px");
		
		pshbtnFixture = new PushButton("Fixture");
		absolutePanel.add(pshbtnFixture, 759, 255);
		pshbtnFixture.setSize("131px", "18px");
		
		pshbtnParticipantes = new PushButton("Participantes");
		absolutePanel.add(pshbtnParticipantes, 759, 285);
		pshbtnParticipantes.setSize("131px", "18px");
		
		pshbtnTablaDePosiciones = new PushButton("Tabla de Posiciones");
		absolutePanel.add(pshbtnTablaDePosiciones, 759, 315);
		pshbtnTablaDePosiciones.setSize("131px", "18px");
		
		pshbtnGenerarFixture = new PushButton("Generar Fixture");
		absolutePanel.add(pshbtnGenerarFixture, 759, 345);
		pshbtnGenerarFixture.setSize("131px", "18px");
		

		txtBxNombre = new TextBox();
		absolutePanel.add(txtBxNombre, 150, 210);
		txtBxNombre.setSize("135px", "15px");
		
		txtBxModalidad = new TextBox();
		absolutePanel.add(txtBxModalidad, 300, 210);
		txtBxModalidad.setSize("135px", "15px");
		
		txtBxDeporte = new TextBox();
		absolutePanel.add(txtBxDeporte, 450, 210);
		txtBxDeporte.setSize("135px", "15px");
		
		txtBxEstadodecompetencia = new TextBox();
		absolutePanel.add(txtBxEstadodecompetencia, 600, 210);
		txtBxEstadodecompetencia.setSize("135px", "15px");
		
		scrollPanelPosiciones = new ScrollPanel();
		absolutePanel.add(scrollPanelPosiciones, 205, 280);
		scrollPanelPosiciones.setSize("520px", "180px");
		
		flexTable = new FlexTable();
		scrollPanelPosiciones.setWidget(flexTable);
		flexTable.setSize("100%", "100%");
		
		
		
		// LABELS 
		
		Label lblEquipo = new Label("Jugador/Equipo");
		lblEquipo.setStyleName("camposTabla");
		absolutePanel.add(lblEquipo,200,250);
		
		Label lblPartidosJugados = new Label("PJ");
		lblPartidosJugados.setStyleName("camposTabla");
		absolutePanel.add(lblPartidosJugados,410,250);
		
		Label lblPartidosGanados = new Label("PG");
		lblPartidosGanados.setStyleName("camposTabla");
		absolutePanel.add(lblPartidosGanados,445,250);
		
		Label lblPartidosEmpatados = new Label("PE");
		lblPartidosEmpatados.setStyleName("camposTabla");
		absolutePanel.add(lblPartidosEmpatados,480,250);
		
		Label lblPartidosPerdidos = new Label("PP");
		lblPartidosPerdidos.setStyleName("camposTabla");
		absolutePanel.add(lblPartidosPerdidos,515,250);
		
		Label lblGolesFavor = new Label("GF");
		lblGolesFavor.setStyleName("camposTabla");
		absolutePanel.add(lblGolesFavor,550,250);
		
		Label lblGolesContra = new Label("GC");
		lblGolesContra.setStyleName("camposTabla");
		absolutePanel.add(lblGolesContra,585,250);
		
		Label lblDiferenciaDeGol = new Label("DG");
		lblDiferenciaDeGol.setStyleName("camposTabla");
		absolutePanel.add(lblDiferenciaDeGol,620,250);
		
		Label lblPuntos = new Label("PTs");
		lblPuntos.setStyleName("camposTabla");
		absolutePanel.add(lblPuntos,655,250);
				
		lblUsuario = new Label("");
		lblUsuario.setText(user);
		lblUsuario.setStyleName("usuarioLabel");
		absolutePanel.add(lblUsuario, 820, 95);
		
		lblSalir = new Label("Salir");
		lblSalir.setStyleName("usuarioLabel");
		absolutePanel.add(lblSalir, 780, 95);
		
		Label lblInformacionDeLa = new Label("INFORMACION DE LA COMPETENCIA");
		lblInformacionDeLa.setStyleName("subTituloInformacionCompetencia");
		absolutePanel.add(lblInformacionDeLa, 275, 140);
		
		
		lblInformacionDeLa.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
								
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new VerCompetenciaUA(getLblUsuario().getText(),getCompetenciaDTO()),100,50);
				
			}
		});
		
		Label lblNombre = new Label("Nombre ");
		lblNombre.setStyleName("label");
		absolutePanel.add(lblNombre, 200, 190);
		
		Label lblModalidad = new Label("Modalidad");
		lblModalidad.setStyleName("label");
		absolutePanel.add(lblModalidad, 340, 190);
		lblModalidad.setSize("45px", "18px");
		
		Label lblDeporte = new Label("Deporte");
		lblDeporte.setStyleName("label");
		absolutePanel.add(lblDeporte, 500, 190);
		lblDeporte.setSize("45px", "18px");
		
		Label lblEstadodecompetencia = new Label("Estado");
		lblEstadodecompetencia.setStyleName("label");
		absolutePanel.add(lblEstadodecompetencia, 650, 190);
		
		// Inicianlizando
		
		
		cargarDatosCompetencia();
		
		CargarTablaPosiciones();
		
		
		
		
		//HANDLERS
			
		getLblUsuario().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				Window.alert("Modficar Datos Usuario ");
				
			}
		});
		
		
		getLblSalir().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				Window.alert("Usted se ha deslogeado");
				
			}
		});
		 getBtnHome().addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
				
//					setVisibilidad(false);
					rootPanel.remove(rootPanel.getWidget(1));
					rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
				   
				}
			});
		 
		 getBtnResultadosBsqueda().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarCompetenciasDeportivasUA(getLblUsuario().getText()),100,45);
				
			}
		});
		
		 
		getBtnImprimir().addClickHandler(new ClickHandler() {
				
				@Override
				public void onClick(ClickEvent event) {
								
					final DialogBox dialogBox2 = new DialogBox();
					final Button dialogBoxButton2 = new Button("Ok");
					final Label textToServerLabel2 = new Label();
					final HTML serverResponseLabel2 = new HTML();
					
					// Handler boton de dialogBox
					dialogBoxButton2.addClickHandler(new ClickHandler() {
						public void onClick(ClickEvent event) {
							dialogBox2.hide();
						}
					});
					
					dialogBox2.setText("Auslober");
					dialogBox2.setAnimationEnabled(true);
					VerticalPanel dialogVPanel = new VerticalPanel();
					dialogVPanel.addStyleName("dialogVPanel");
					dialogVPanel.add(new HTML("<b>Respuesta del servidor:</b>"));
					dialogVPanel.add(textToServerLabel2);
					dialogVPanel.add(new HTML("<br>"+"Preview para imprimir (En Construccion)"));
					dialogVPanel.add(serverResponseLabel2);
					dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
					dialogVPanel.add(dialogBoxButton2);
					dialogBox2.setWidget(dialogVPanel);
					dialogVPanel.setSize("250px", "100px");
					dialogBox2.setPopupPosition(535,225);
					dialogBox2.show();
					
					
				}
			});
		 
		getPshbtnParticipantes().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new ListarParticipantes(getLblUsuario().getText(), getCompetenciaDTO()),100,50);
				
				
			}
		});
		 
		getPshbtnFixture().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
		
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new FixtureUA(getLblUsuario().getText(),getCompetenciaDTO(),1),100,50);
			}
		});
	
		getPshbtnGenerarFixture().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				 
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					 
				     public void onFailure(Throwable caught) {
				      // do some UI stuff to show failure
				    	 Window.alert(caught.getMessage());
				    }

					@Override
					public void onSuccess(String result) {
						 
//						setVisibilidad(false);
						rootPanel.remove(rootPanel.getWidget(1));
						rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
						Window.alert(result);

						 
						
					}
				  };
				
				 
			}
		});
		 
		
		
		// TAB INDEX
		
		getBtnHome().setTabIndex(1);
		getBtnResultadosBsqueda().setTabIndex(2);
		getTxtBxNombre().setTabIndex(3);
		getTxtBxModalidad().setTabIndex(4);
		getTxtBxDeporte().setTabIndex(5);
		getTxtBxEstadodecompetencia().setTabIndex(6);
		getPshbtnModificar().setTabIndex(7);
		getPshbtnDarDeBaja().setTabIndex(8);
		getPshbtnFixture().setTabIndex(9);
		getPshbtnParticipantes().setTabIndex(10);
		getPshbtnTablaDePosiciones().setTabIndex(11);
		getPshbtnGenerarFixture().setTabIndex(12);
		getBtnImprimir().setTabIndex(13);
		getScrollPanelPosiciones().getElement().setTabIndex(14);
		
	}
	
     
	public void CargarTablaPosiciones(){
		
		
		final TablaPosicionesServiceAsync tablaPosiciones = GWT.create(TablaPosicionesService.class);
		
		
		AsyncCallback<ArrayList<PosicionesLigaDTO>> callback = new AsyncCallback<ArrayList<PosicionesLigaDTO>>(){
			
			@Override
			public void onSuccess(ArrayList<PosicionesLigaDTO> result) {
				
				
				for(int i=0;i<result.size();i++){
					
					flexTable.setText(i, 0, result.get(i).getEquipo());
					flexTable.getColumnFormatter().setWidth(0, "200px");
					flexTable.setText(i, 1, result.get(i).getPartidosJugados()+"");
					flexTable.setText(i, 2, result.get(i).getPartidosGanados()+"");
					flexTable.setText(i, 3, result.get(i).getPartidosEmpatados()+"");
					flexTable.setText(i, 4, result.get(i).getPartidosPerdidos()+"");
					flexTable.setText(i, 5, result.get(i).getGolesFavor()+"");
					flexTable.setText(i, 6, result.get(i).getGolesContra()+"");
					flexTable.setText(i, 7, result.get(i).getDiferenciaDeGoles()+"");
					flexTable.setText(i, 8, result.get(i).getPuntos()+"");
							
					flexTable.setStyleName("resultadosTabla");
					
				}
						
			}
			
			@Override
			public void onFailure(Throwable caught) {
							
					Window.alert(caught.getMessage());
								
				}
		};
		
		tablaPosiciones.getTablaPosiciones(getCompetenciaDTO(), 0, callback);
		
	}

	public void cargarDatosCompetencia(){
		
		getTxtBxNombre().setText(getCompetenciaDTO().getNombre());getTxtBxNombre().setReadOnly(true);
		getTxtBxModalidad().setText(getCompetenciaDTO().getModalidad());getTxtBxModalidad().setReadOnly(true);
		getTxtBxDeporte().setText(getCompetenciaDTO().getDeporte());getTxtBxDeporte().setReadOnly(true);
		getTxtBxEstadodecompetencia().setText(getCompetenciaDTO().getEstadodecompetencia());getTxtBxEstadodecompetencia().setReadOnly(true);
		
	}
	
	
	/**
	 * @return the txtBxNombre
	 */
	public TextBox getTxtBxNombre() {
		return txtBxNombre;
	}


	/**
	 * @param txtBxNombre the txtBxNombre to set
	 */
	public void setTxtBxNombre(TextBox txtBxNombre) {
		this.txtBxNombre = txtBxNombre;
	}


	/**
	 * @return the txtBxModalidad
	 */
	public TextBox getTxtBxModalidad() {
		return txtBxModalidad;
	}


	/**
	 * @param txtBxModalidad the txtBxModalidad to set
	 */
	public void setTxtBxModalidad(TextBox txtBxModalidad) {
		this.txtBxModalidad = txtBxModalidad;
	}


	/**
	 * @return the txtBxDeporte
	 */
	public TextBox getTxtBxDeporte() {
		return txtBxDeporte;
	}


	/**
	 * @param txtBxDeporte the txtBxDeporte to set
	 */
	public void setTxtBxDeporte(TextBox txtBxDeporte) {
		this.txtBxDeporte = txtBxDeporte;
	}


	/**
	 * @return the txtBxEstadodecompetencia
	 */
	public TextBox getTxtBxEstadodecompetencia() {
		return txtBxEstadodecompetencia;
	}


	/**
	 * @param txtBxEstadodecompetencia the txtBxEstadodecompetencia to set
	 */
	public void setTxtBxEstadodecompetencia(TextBox txtBxEstadodecompetencia) {
		this.txtBxEstadodecompetencia = txtBxEstadodecompetencia;
	}


	/**
	 * @return the lblUsuario
	 */
	public Label getLblUsuario() {
		return lblUsuario;
	}


	/**
	 * @param lblUsuario the lblUsuario to set
	 */
	public void setLblUsuario(Label lblUsuario) {
		this.lblUsuario = lblUsuario;
	}


	/**
	 * @return the btnHome
	 */
	public Button getBtnHome() {
		return btnHome;
	}


	/**
	 * @return the btnResultadosBsqueda
	 */
	public Button getBtnResultadosBsqueda() {
		return btnResultadosBsqueda;
	}


	/**
	 * @return the btnImprimir
	 */
	public Button getBtnImprimir() {
		return btnImprimir;
	}


	/**
	 * @return the flexTable
	 */
	public FlexTable getFlexTable() {
		return flexTable;
	}


	/**
	 * @return the pshbtnModificar
	 */
	public PushButton getPshbtnModificar() {
		return pshbtnModificar;
	}


	/**
	 * @return the pshbtnDarDeBaja
	 */
	public PushButton getPshbtnDarDeBaja() {
		return pshbtnDarDeBaja;
	}


	/**
	 * @return the pshbtnFixture
	 */
	public PushButton getPshbtnFixture() {
		return pshbtnFixture;
	}




	/**
	 * @return the rootPanel
	 */
	public RootPanel getRootPanel() {
		return rootPanel;
	}
	
	/**
	 * @return the pshbtnParticipantes
	 */
	public PushButton getPshbtnParticipantes() {
		return pshbtnParticipantes;
	}


	/**
	 * @return the pshbtnTablaDePosiciones
	 */
	public PushButton getPshbtnTablaDePosiciones() {
		return pshbtnTablaDePosiciones;
	}


	/**
	 * @return the pshbtnGenerarFixture
	 */
	public PushButton getPshbtnGenerarFixture() {
		return pshbtnGenerarFixture;
	}


	/**
	 * @return the lblSalir
	 */
	public Label getLblSalir() {
		return lblSalir;
	}


	/**
	 * @return the competencia
	 */
	public CompetenciaDTO getCompetenciaDTO() {
		return competencia;
	}


	/**
	 * @param competencia the competencia to set
	 */
	public void setCompetencia(CompetenciaDTO competencia) {
		this.competencia = competencia;
	}


	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
	
	public ScrollPanel getScrollPanelPosiciones() {
		return scrollPanelPosiciones;
	}

}
